/* Author: Nahuel F. Lema, Maxi Ya�ez

 */

var autocompletar = function (nombre, id) {
    setTimeout(
        function () {
            $('#destinatario_field').val(nombre)
            $('#destinatario').val(id)
        },
        200);
}

window.onload = function () {
    var panelUsuarioController = {
	usuario: { //USUARIO
	    data:null,
	    isDataLoaded:false,
	    isDataPrinted:false,
	    container: function () {
		return document.getElementById('usuario-page-container')
		},
	    page: function () {
		return document.getElementById('usuario-page')
		},
	    getData: function () {
		var self = this;
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/usuarioController/find',
		    type: 'POST',
		    beforeSend: function () {
			scriptsController.loader.append($('#panel-section'), 'medium');
		    },
		    success: function(data) {
			self.data = data;
			self.isDataLoaded = true;
			self.print();
			scriptsController.loader.remove($('#panel-section'));
		    }
		});
	    },
	    setAttribue: function (attr, val) {
		this.data[attr] = val;
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/usuarioController/setAttribute/'+attr+'/'+val,
		    type: 'POST'
		});
	    },
	    print: function () {
		if (this.isDataLoaded) {
		    var html = this.container().value;
		    if (this.isDataPrinted) {
			this.show();
		    } else {
			if (this.data.genero) {
			    var generoMasculino = '', generoFemenino = '';
			    (this.data.genero == 1)?generoMasculino = 'checked':generoFemenino='checked';
			}
			var avatar = (this.data.imagesFacebook)?this.data.avatarFb:this.data.avatar;
			html = html.replace(/\$\{usuarioNick\}/g, this.data.nick)
			.replace(/\$\{usuarioEmail\}/g, this.data.email)
			.replace(/\$\{usuarioNombre\}/g, this.data.nombre)
			.replace(/\$\{usuarioApellido\}/g, this.data.apellido)
			.replace(/\$\{usuarioNacimiento\}/g, this.data.nacimiento)
			.replace(/\$\{usuarioAvatar\}/g, avatar)
			.replace(/\$\{markerDireccion\}/g, this.data.direccion)
			.replace(/\$\{generoMasculino\}/g, generoMasculino)
			.replace(/\$\{generoFemenino\}/g, generoFemenino)
			.replace(/\$\{checked\}/g, (this.data.imagesFacebook)?'checked':'')
			.replace(/\$\{provinciaToSelect\}/g, this.data.provinciaToSelect)
			//.replace(/\$\{departamentoToSelect\}/g, this.data.departamentoToSelect)
			.replace(/\$\{localidadToSelect\}/g, this.data.localidadToSelect)
			.replace(/\$\{baseUrl\}/g, scriptsController.defs.baseUrl)
			.replace(/\$\{display\}/g, (this.data.imagesFacebook)?'none':'block')
			.replace(/\$\{[a-zA-Z]+\}/g, '');
			this.isDataPrinted = true;
			panelUsuarioController.sectionManager.contaier.innerHTML += html;
			if (this.data.haveFacebook) {
			    var self = this;
			    document.getElementById('imagesFacebookContainer').style.display = 'block';
			    document.getElementById('imagesFacebook').onclick = function () {
				if (this.checked) {
				    document.getElementById('fileuploaderContainer').style.display = 'none';
				    document.getElementById('imagenUsuario').src = self.data.avatarFb+'?width=120&height=120';
				} else {
				    document.getElementById('fileuploaderContainer').style.display = 'block';
				    document.getElementById('imagenUsuario').src = self.data.avatar+'?width=120&height=120';
				}
			    }
			} else {
			    document.getElementById('fileuploaderContainer').style.display = 'block';
			}
			panelUsuarioController.imagesUploader.init(this.data.id);
			panelUsuarioController.selects.init();
		    }
		} else {
		    this.getData();
		}
	    },
	    hide: function () {
		this.page().style.display = 'none'
	    },
	    show: function () {
		this.page().style.display = 'block'
	    }
	},
	contrasena: { //CONTRASE�A
	    data:null,
	    isDataPrinted:false,
	    container: function () {
		return document.getElementById('contrasena-page-container')
		},
	    page: function () {
		return document.getElementById('contrasena-page');
	    },
	    errors:[
	    'La contrase&ntilde;a se modific&oacute; con &eacute;xito.',
	    'Contrase&ntilde;a nueva y Reeingresa tu contrase&ntilde;a nueva no coinciden',
	    'Contrase&ntilde;a actual en incorrecta'
	    ],
	    getData: function () {
		var self = this;
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/usuarioController/havePass',
		    type: 'POST',
		    beforeSend: function () {
			scriptsController.loader.append($('#panel-section'), 'medium');
		    },
		    success: function(data) {
			self.data = data;
			self.isDataLoaded = true;
			self.print();
			scriptsController.loader.remove($('#panel-section'));
		    }
		});
	    },
	    print: function () {
		if (this.isDataLoaded) {
		    if (this.isDataPrinted) {
			this.show();
		    } else {
			panelUsuarioController.sectionManager.contaier.innerHTML += this.container().value;
			if (!this.data) {
			    document.getElementById('leyenda').className = '';
			    document.getElementById('current_pass_container').className = 'hide'
			}
			this.isDataPrinted = true;
		    }
		} else {
		    this.getData();
		}
                this.bind();
	    },
	    hide: function () {
		this.page().style.display = 'none'
	    },
	    show: function () {
		this.page().style.display = 'block'
	    },
	    bind: function () {
                this.unbind();
		var self = this;
                $('#submit-form-contrasena').click(function () {
		    var button = this;
		    button.onclick = null;
		    scriptsController.loader.append($('#waiting'), 'small');
		    document.getElementById('errorContrasena').innerHTML = '';
		    var currentPass = document.getElementById('current_pass').value;
		    var newPass = document.getElementById('new_pass').value;
		    var reNewPass = document.getElementById('re_new_pass').value;
		    $.ajax({
			url: scriptsController.defs.baseUrl+'controllers/usuarioController/cambiarPass/',
			type: 'POST',
			data:'current_pass='+currentPass+'&new_pass='+newPass+'&re_new_pass='+reNewPass,
			success: function(data) {
			    document.getElementById('current_pass').value = '';
			    document.getElementById('new_pass').value = '';
			    document.getElementById('re_new_pass').value = '';
			    document.getElementById('errorContrasena').innerHTML = self.errors[data];
			    scriptsController.loader.remove($('#waiting'));
			    if (data == '0') {
				button.className += ' hide';
			    } else {
				self.bind();
			    }
			}
		    });
		})
	    },
            unbind: function () {
                $('#submit-form-contrasena').unbind('click');
            }
	},
	mensajes: { //MENASJES
	    list:[],
	    isDataLoaded:false,
	    isDataPrinted:false,
	    pagina:0,
	    container: function () {
		return document.getElementById('mensajes-page-container')
		},
	    page: function () {
		return document.getElementById('mensajes-page')
		},
	    mensajeTpl: function () {
		return document.getElementById('mensajeTpl')
		},
	    getList: function () {
		var self = this;
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/mensajeController/conversaciones/'+self.pagina,
		    type: 'POST',
		    beforeSend: function () {
			scriptsController.loader.append($('#panel-section'), 'medium');
		    },
		    success: function(data) {
			self.list = data;
			self.isDataLoaded = true;
			self.print();
			scriptsController.loader.remove($('#panel-section'));
		    }
		});
	    },
	    print: function () {
		if (this.isDataLoaded) {
		    if (this.isDataPrinted) {
			this.show();
		    } else {
			var html = this.mensajeTpl().value;
			panelUsuarioController.sectionManager.contaier.innerHTML += this.container().innerHTML;
			var listarMensajes = document.getElementById('listarMensajes');
			listarMensajes.innerHTML = '';
			for (var i in this.list) {
			    listarMensajes.innerHTML += html.replace(/\$\{mensajeId\}/g, this.list[i].id)
			    .replace(/\$\{mensajeAsunto\}/g, this.list[i].asunto)
			    .replace(/\$\{mensajeContenido\}/g, this.list[i].contenido)
			    .replace(/\$\{mensajeFecha\}/g, this.list[i].fecha)
			    .replace(/\$\{emisor\}/g, this.list[i].emisor)
			    .replace(/\$\{[a-zA-Z]+\}/g, '');
			}
			this.isDataPrinted = true;
		    }
		} else {
		    this.getList();
		}
                this.bind();
	    },
	    hide: function () {
		this.page().style.display = 'none'
	    },
	    show: function () {
		this.page().style.display = 'block'
	    },
	    bind: function () {
		this.unbind();
                $('#btn-crear-mensajes').click(function (e) { //componer mensaje
                    e.preventDefault();
		    panelUsuarioController.url.encode('componerMensaje');
		    panelUsuarioController.sectionManager.load('componerMensaje');
		})
		$('.verConversacion').click(function (e) { //ver conversacion
                    e.preventDefault();
		    var id = $(this).data('emisor');
		    panelUsuarioController.url.encode('conversacion');
		    panelUsuarioController.sectionManager.load('conversacion', {
			id:id
		    });
		})
	    },
            unbind: function () {
                $('#btn-crear-mensajes, .verConversacion').unbind('click');
            }
	},
	componerMensaje: { //COMPONER MENSAJE
	    isDataPrinted:false,
	    page: function () {
		return document.getElementById('componerMensaje-page')
		},
	    container: function () {
		return document.getElementById('componerMensaje-page-container')
		},
	    print: function () {
		if (this.isDataPrinted) {
		    this.show();
		} else {
		    panelUsuarioController.sectionManager.contaier.innerHTML += this.container().innerHTML.replace(/\${componerTitulo}/g, 'Componer mensaje');
		    this.isDataPrinted = true;
		}
                this.bind();
	    },
	    send: function () {
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/mensajeController/save/',
		    data: $('#form-crear-mensajes').serialize(),
		    type: 'POST',
		    beforeSend: function () {
                       //cargando
		    },
		    success: function(data) {
			alert('mensaje enviado')
		    }
		});
	    },
	    hide: function () {
		this.page().style.display = 'none'
	    },
	    show: function () {
		this.page().style.display = 'block'
	    },
	    bind: function () {
                this.unbind();
		var self = this;
		$('.btn-listar-mensajes').click(function (e) {//volver
                    e.preventDefault();
		    $(this).unbind('click');
		    panelUsuarioController.url.encode('mensajes');
		    panelUsuarioController.sectionManager.load('mensajes');
		})
		$('.submit-form-crear-mensajes').click(this.send) //enviar mensaje
		$('#btn-crear-mensajes').click(function (e) { //componer mensaje
                    e.preventDefault();
		    panelUsuarioController.url.encode('componerMensaje');
		    panelUsuarioController.sectionManager.load('componerMensaje');
		})
		$( "#destinatario_field").autocomplete({ //autocomplete
		    source: scriptsController.defs.baseUrl+'controllers/usuarioController/autocomplete/',
                    select:function (event, ui) {
                        autocompletar(ui.item.nombre, ui.item.id)
                    }
		    }).data( "autocomplete" )._renderItem = function( ul, item ) {
		    var inner_html = '<a href="javascript:void(0);"><div class="list_item_container"><div class="image"><img src="'+item.avatar+'"></div><div class="label">'+item.nombre+'</div></div></a>';
		    return $( "<li></li>" )
		    .data( "item.autocomplete", item )
		    .append(inner_html)
		    .appendTo(ul);
		}
	    },
            unbind: function () {
                $('.btn-listar-mensajes, .submit-form-crear-mensajes, #btn-crear-mensajes').unbind('click')
                $("#destinatario_field").autocomplete("destroy");
            }
	},
	conversacion: { //CONVERSACION
	    list:[],
	    isDataLoaded:false,
	    isDataPrinted:false,
	    pagina:0,
	    container: function () {
		return document.getElementById('conversacion-page-container')
		},
	    page: function () {
		return document.getElementById('conversacion-page')
		},
	    mensajeTpl: function () {
		return document.getElementById('mensajeTpl')
		},
	    getList: function (d) {
		var self = this;
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/mensajeController/conversacionCon/'+self.pagina,
		    data: {
			usuarioId:d.id
			},
		    type: 'POST',
		    beforeSend: function () {
			scriptsController.loader.append($('#panel-section'), 'medium');
		    },
		    success: function(data) {
			self.list = data;
			self.isDataLoaded = true;
			self.print(d);
			scriptsController.loader.remove($('#panel-section'));
		    }
		});
	    },
	    print: function (d) {
		if (this.isDataLoaded) {
                    var html = this.mensajeTpl().value;
                    if (this.isDataPrinted) {
                        this.page().parentNode.removeChild(this.page());
                    }
                    panelUsuarioController.sectionManager.contaier.innerHTML += this.container().innerHTML.replace(/\$\{destinatario\}/g, d.id);
                    var listarConversacion = document.getElementById('listarConversacion');
                    listarConversacion.innerHTML = '';
                    for (var i in this.list) {
                        listarConversacion.innerHTML += html.replace(/\$\{mensajeId\}/g, this.list[i].id)
                        .replace(/\$\{mensajeAsunto\}/g, this.list[i].asunto)
                        .replace(/\$\{mensajeContenido\}/g, this.list[i].contenido)
                        .replace(/\$\{mensajeFecha\}/g, this.list[i].fecha)
                        .replace(/\$\{[a-zA-Z]+\}/g, '');
                    }
                    this.isDataLoaded = false;
                    this.isDataPrinted = true;
		} else {
		    this.getList(d);
		}
                this.bind();
	    },
	    send: function () {
                $.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/mensajeController/save/',
		    data: $('#form-responder').serialize(),
		    type: 'POST',
		    beforeSend: function () {
                        $('#listarConversacion').prepend('<li class="box-item span" id="envio-loader"></li>');
                        scriptsController.loader.append($('#envio-loader'), 'medium');
                        $('#mensaje_field').val('');
		    },
		    success: function(data) {
			var html = $('#mensajeTpl').val();
                        html = html.replace(/\$\{mensajeId\}/g, data.id)
                        .replace(/\$\{mensajeAsunto\}/g, data.asunto)
                        .replace(/\$\{mensajeContenido\}/g, data.contenido)
                        .replace(/\$\{mensajeFecha\}/g, data.fecha)
                        .replace(/\$\{[a-zA-Z]+\}/g, '');
                        scriptsController.loader.append($('#envio-loader'));
                        $('#envio-loader').remove()
                        $('#listarConversacion').prepend(html);
		    }
		});
	    },
	    hide: function () {
		this.page().style.display = 'none'
	    },
	    show: function () {
		this.page().style.display = 'block'
	    },
	    bind: function () {
                this.unbind();
                $('.btn-listar-mensajes').click(function (e) {//volver
                    e.preventDefault();
		    $(this).unbind('click');
		    panelUsuarioController.url.encode('mensajes');
		    panelUsuarioController.sectionManager.load('mensajes');
		})
		$('.submit-form-crear-mensajes').click(this.send) //enviar mensaje
		$('#btn-crear-mensajes').click(function (e) { //componer mensaje
		    panelUsuarioController.url.encode('componerMensaje');
		    panelUsuarioController.sectionManager.load('componerMensaje');
		    e.preventDefault();
		})
	    },
            unbind: function () {
                $('.submit-form-crear-mensajes, #btn-crear-mensajes, .btn-listar-mensajes').unbind('click')
            }
	},
	favoritos: { //FAVORITOS
	    list:[],
	    isDataLoaded:false,
	    isDataPrinted:false,
	    pagina:0,
	    container: function () {
		return document.getElementById('favoritos-page-container')
		},
	    page: function () {
		return document.getElementById('favoritos-page')
		},
	    favoritoTpl: function () {
		return document.getElementById('favoritoTpl')
		},
	    getList: function () {
		var self = this;
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/favoritoController/findByUsuario/'+self.pagina,
		    type: 'POST',
		    beforeSend: function () {
			scriptsController.loader.append($('#panel-section'), 'medium');
		    },
		    success: function(data) {
			self.list = data;
			self.isDataLoaded = true;
			self.print();
			scriptsController.loader.remove($('#panel-section'));
		    }
		});
	    },
	    remove: function (i) {
		//trabaja con el dom
		var favorito = document.getElementById('favorito'+i);
		favorito.parentNode.removeChild(favorito);
		//trabaja con el objeto en base
		$.ajax({
		    url: scriptsController.defs.baseUrl+'controllers/favoritoController/remove/marker/'+i,
		    type: 'POST'
		});
	    },
	    print: function () {
		if (this.isDataLoaded) {
		    if (this.isDataPrinted) {
			this.show();
		    } else {
			var html = this.favoritoTpl().value;
			panelUsuarioController.sectionManager.contaier.innerHTML += this.container().value;
			var listarFavoritos = document.getElementById('listarFavoritos');
			listarFavoritos.innerHTML = '';
			for (var i in this.list) {
			    listarFavoritos.innerHTML += html.replace(/\$\{favoritoId\}/g, this.list[i].id)
			    .replace(/\$\{favoritoCategoria\}/g, this.list[i].categoria)
			    .replace(/\$\{favoritoDireccion\}/g, this.list[i].direccion)
			    .replace(/\$\{favoritoHorarios\}/g, this.list[i].horarios)
			    .replace(/\$\{baseUrl\}/g, scriptsController.defs.baseUrl)
			    .replace(/\$\{favoritoNombreUrl\}/g, this.list[i].nombreUrl)
			    .replace(/\$\{favoritoReciben\}/g, this.list[i].reciben)
			    .replace(/\$\{[a-zA-Z]+\}/g, '');
			}
			this.isDataPrinted = true;
		    }
		} else {
		    this.getList();
		}
                this.bind();
	    },
	    hide: function () {
		this.page().style.display = 'none'
	    },
	    show: function () {
		this.page().style.display = 'block'
	    },
	    bind: function () {
		this.unbind();
                var self = this;
		$('#listarFavoritos a').click(function () {
		    var id = $(this).data('id').slice(8);
		    self.remove(id)
		})
	    },
            unbind: function () {
                $('#listarFavoritos a').unbind('click')
            }
	},


	url: {
	    encode: function(section){
		if (navigator.appName == "Microsoft Internet Explorer") {//si es explorer (Explorer, ya no te queremos como en el 93)
		    if (window.location.href.indexOf('#') == -1) {
			document.location = scriptsController.defs.baseUrl+'panel/#!/'+section;
		    } else {
			document.location.hash = '#!/'+section;
		    }
		} else {//si es otro navegador
		    window.history.replaceState('', 'Panel usuario', scriptsController.defs.baseUrl+'panel/'+section);
		}
	    },
	    decode: function(){
		var url = document.location + '';
		url = url.replace(scriptsController.defs.baseUrl+'panel/', '')
		.replace('#!/', '')
		.replace(/\/$/, '');
		var section = (!!url)?url:'usuario';
		panelUsuarioController.sectionManager.load(section)

	    }
	},

	sectionManager: {
	    currentSection:null,
	    contaier: document.getElementById('panel-section'),
	    load: function (section, data) {
		if (this.currentSection)panelUsuarioController[this.currentSection].hide();
		panelUsuarioController[section].print(data);
		this.currentSection = section;
		$('#panel-menu li.active').removeClass('active');
		$('a[href="'+section+'"]').parent().addClass('active')
	    },
	    init: function () {
		this.bind();
	    },
	    bind: function () {
		$('#panel-menu a').click(function (e) {
		    panelUsuarioController.url.encode($(this).attr('href'));
		    panelUsuarioController.sectionManager.load($(this).attr('href'));
		    e.preventDefault();
		})
	    }
	},

	imagesUploader: {
	    defs: {
		time:null
	    },
	    init: function (objectId) {
		var boton = document.getElementById('fileuploader');
		if (boton) {
		    var self = this;
		    var d = new Date();
		    self.defs.time = Math.floor((d.getTime()/1000));
		    new qq.FileUploader({
			element: boton,
			action: scriptsController.defs.baseUrl+'controllers/usuarioController/uploadImage/',
			allowedExtensions: ['jpg', 'jpeg', 'png', 'gif'],
			sizeLimit: 1 * 1024 * 1024,
			params: {
			    objectId:objectId,
			    time:self.defs.time
			},
			messages: {
			    typeError: "{file} es de un formato no permitido. Estos son los formatos permitidos: {extensions}.",
			    sizeError: "{file} es muy pesado, el m&aacuteximo permitido es de {sizeLimit}.",
			    onLeave: "Hay archivos que todav&iacute; no se cargaron. Si dej&aacute; la p&aacute;gina no se van a cargar con &eacute;xito."
			},
			showMessage: function(message){
			    alert(message);
			},
			onComplete: function(id, fileName, responseJSON){
			    panelUsuarioController.usuario.data.avatar = document.getElementById('imagenUsuario').src = scriptsController.defs.baseUrl+responseJSON.image;
			    document.getElementById('time').value = self.defs.time;
			}
		    });
		}
	    }
	},

	selects: {
	    provincia: null,
	    departamento: null,
	    localidad: null,
	    init: function () {
		this.provincia = document.getElementById('selectProvincia');
		//this.departamento = document.getElementById('selectDepartamento');
		this.localidad = document.getElementById('selectLocalidad');
		this.provincia.className = 'field-dropdown span';
		//this.departamento.className = 'field-dropdown span';
		this.localidad.className = 'field-dropdown span';
		this.bind();
	    },
	    bind: function () {
		/*this.provincia.onchange = function () {
		    var id = this.value;
		    var padre = panelUsuarioController.selects.departamento.parentNode;
		    if (id) {
			$.ajax({
			    url: scriptsController.defs.baseUrl+'controllers/select/depatamentosByProvincia/'+id,
			    type: 'POST',
			    success: function(data) {
				padre.removeChild(panelUsuarioController.selects.departamento);
				padre.innerHTML += data;
				panelUsuarioController.selects.init();
			    }
			});
		    } else {
			panelUsuarioController.selects.disabled('departamento');
			panelUsuarioController.selects.disabled('localidad');
		    }
		}
		this.departamento.onchange = function () {
		    var id = this.value;
		    var padre = panelUsuarioController.selects.localidad.parentNode;
		    if (id) {
			$.ajax({
			    url: scriptsController.defs.baseUrl+'controllers/select/localidadesByDepartamento/'+id,
			    type: 'POST',
			    success: function(data) {
				padre.removeChild(panelUsuarioController.selects.localidad);
				padre.innerHTML += data;
				panelUsuarioController.selects.init();
			    }
			});
		    } else {
			panelUsuarioController.selects.disabled('localidad');
		    }
		}*/
                this.provincia.onchange = function () {
		    var id = this.value;
		    var padre = panelUsuarioController.selects.localidad.parentNode;
		    if (id) {
			$.ajax({
			    url: scriptsController.defs.baseUrl+'controllers/select/localidadesByDepartamento/'+id,
			    type: 'POST',
			    success: function(data) {
				padre.removeChild(panelUsuarioController.selects.localidad);
				padre.innerHTML += data;
				panelUsuarioController.selects.init();
			    }
			});
		    } else {
			panelUsuarioController.selects.disabled('localidad');
		    }
		}
	    },
	    disabled: function (select) {
		this[select].innerHTML = '<option value="">Elegir</option>';
		this[select].disabled = 'disabled';
	    }
	},


	init: function(){
	    this.url.decode();
	    this.sectionManager.init();
	}
    }
    panelUsuarioController.init();
}